jetcrab\parser\statements/
function.rs1use crate::ast::{FunctionDeclaration, Node};
2use crate::lexer::TokenKind;
3use crate::parser::error::ParseResult;
4use crate::parser::Parser;
5
6impl Parser {
7 pub fn parse_function_declaration(&mut self) -> ParseResult<Node> {
8 self.advance();
9
10 let id = if self.check_identifier() {
11 Some(Box::new(self.parse_identifier()?))
12 } else {
13 None
14 };
15
16 self.expect(TokenKind::LeftParen)?;
17 let params = self.parse_parameters()?;
18 self.expect(TokenKind::RightParen)?;
19
20 let body = Box::new(self.parse_function_body()?);
21
22 let span = self.create_span_from_tokens();
23 Ok(Node::FunctionDeclaration(FunctionDeclaration {
24 id,
25 params,
26 body,
27 generator: false,
28 r#async: false,
29 span: Some(span),
30 }))
31 }
32}